package chapter04;

public class java02_Object {
    public static void main(String[] args) {
        // TODO 面向对象
        // 所谓的面向对象，其实就是分析问题时，以问题所涉及到的事或物为中心的分析方式
        // 类和对象
        // 类表示归纳和整理
        // 对象就表示具体的事务
        // TODO class(类)
        /*
        类的语法的基本语法结构：
        class 类名 {
            特征(属性),
            功能（方法）
        }

        创建对象的语法：
        new 类名();
        类名 变量 = new 类名();
         */

        // 问题： 做一道菜，红烧排骨
        // 类： 菜 对象：红烧排骨

        // TODO 1. 先声明类
        // TODO 2. 创建对象
        // TODO 3. 声明属性， 所谓的属性就是类中的变量
        //         变量类型 变量名称 = 变量值
        //         属性类型 属性名称 = 属性值
        // TODO 4. 声明方法
        //         void 方法名 (参数) { 功能代码 }
        // TODO 5. 执行方法
        //         对象.方法名 ()

        /*
        class 类名() {
            //属性(0个或者多个)
            类型 名称 = 值;
            //方法(行为：0个或多个)
            void 方法名() {
                逻辑代码
            }
        }

        使用：
            构建对象： new 类名(); 类名 对象名 = new 构造方法();
            访问属性： 对象.属性名;
            访问方法： 对象。方法名();
         */

        // 特殊的对象：空对象(NULL),没有引用的对象，称之为空对象，关键字对象。
        // 所有引用类型变量的默认取值就是NULL


        // TODO 属性
        // (所谓的属性，其实就是类的对象的相同特征。
        // 语法和变量的声明很像。
        // 属性类型属性名称 = 属性值
        // 如果在声明属性的同时进行了初始化赋值，那么所有对象的属性就完全相同
        // 所以如果希望每个对象的属性不一致，那么可以不用在声明属性的时候进行初始化。
        // 那么属性会在构造对象的时候默认初始化，而默认初始化的值取决鱼属性的类型，
        // byte, short,int, Long =0
        // float,double =0.0
        // boolean flg false
        // char=空字符
        // 引用数据类型 => null
        // (变量的作用域非常小，只在当前的大括号内有效
        // 属性不仅仅在当前类中有效，而且可以随着对象在其他地方使用
        // 变量使用前必须初始化，否则会出现错误，属性可以不用初始化，因为JV州会帮助我们自动完成初始化。

        // TODO 方法
        // 声明的语法：void 方法名() { 逻辑代码 }
        // 声明的语法：[方法的返回值类型][void] 方法名() { 逻辑代码 }
        // void的位置 是方法的返回值类型,  void本身表示该方法无返回值, 有返回值的写对应结果具体的数据类型
        // 方法的调用：对象.方法名();

        // TODO 方法 - Param
        // 使用外部数据控制方法内部实现的操作，使用的是参数语法实现，也叫方法参数。
        // 语法: 方法名( 参数类型 参数名称)
        // 参数列表
        // 语法: 方法名( 参数类型1 参数名称1, 参数类型2 参数名称2, ...)
        // 当方法传递多个参数时，需要注意：
        // 1. 参数个数需要匹配
        // 2. 参数类型需要匹配
        // 3. 参数顺序需要匹配
        // 4. 当参数的个数不确定，但是类型相同时，可以采用特殊的参数语法声明：可变参数
        //    注意：可变参数最多只有一个且应放在最后
        //    语法： 参数类型... 参数名称

        // 因为字符串string是不可变类型，运算符+会创建一个新的string对象，而其他引用类型的对象并没有运算符重载过
        // Java 中方法参数的传递为值传递
        // 基本数据类型：数值
        //引用数据类型：引用地址

    }
}
